# -*-coding:utf-8-*-
import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)
data = pd.DataFrame([[68, 90, 85],
                     [71, 58, 91],
                     [62, 84, 52],
                     [97, 67, 97]],
                    columns=['英语', '语文', '数学'],
                    index=pd.date_range('2022-01-01', '2022-01-04'))

"""shift(periods=1, freq=None, axis=0, fill_value)
    对series或dataframe中的数据进行移位（形状不变，类似于逻辑移位），移动后没有数据的位置补NaN
    -period：移动的幅度（axis=0时正数表示向下移动，axis=1时正数表示向右移动）
    -freq：类型为DateOffset、timedelta、、time rule string，只适用于时间序列，如果这个参数存在，将会按照这个参数值来移动时间索引，
           而数据值不会发生变化
    -axis：0：上下移动。1：左右移动
    -fill_value：需要填充的值。
>>> df1
            英语   语文   数学
2022-01-01     0     0     0
2022-01-02     0     0     0
2022-01-03    68    90    85
2022-01-04    71    58    91
>>> s1
2022-01-01     0.0
2022-01-02     6.0
2022-01-03   -39.0
2022-01-04    45.0
Freq: D, Name: 数学, dtype: float64
>>> df2
            英语   语文   数学
2022-01-03    68    90    85
2022-01-04    71    58    91
2022-01-05    62    84    52
2022-01-06    97    67    97
"""
# 数据的移动
df1 = data.shift(2, fill_value=0)  # 下移2格
s1 = data['数学']-data['数学'].shift().bfill()  # 统计数学成绩相比上次的分差
# 时间索引的移动
df2 = data.shift(freq=pd.Timedelta(days=2))  # 时间索引先后移2天
print(df2.T)